import { unified } from 'unified'
import remarkParse from 'remark-parse'
import remarkGfm from 'remark-gfm'
import remarkRehype from 'remark-rehype'
import rehypeStringify from 'rehype-stringify'

/**
 * Markdown转HTML
 * 支持GitHub Flavored Markdown扩展语法
 */
export function markdownToHtml(markdown: string): string {
  if (!markdown || markdown.trim() === '') {
    return '<p></p>'
  }

  try {
    const result = unified()
      .use(remarkParse)
      .use(remarkGfm) // 支持表格、删除线、任务列表等GFM扩展
      .use(remarkRehype, { allowDangerousHtml: false }) // 转换为HTML，不允许危险HTML
      .use(rehypeStringify)
      .processSync(markdown)

    return String(result)
  } catch (error) {
    console.error('[Markdown转换] Markdown转HTML失败', error)
    // 失败时返回原始Markdown包裹在pre标签中
    return `<pre>${escapeHtml(markdown)}</pre>`
  }
}

/**
 * 转义HTML特殊字符
 */
function escapeHtml(text: string): string {
  const map: Record<string, string> = {
    '&': '&amp;',
    '<': '&lt;',
    '>': '&gt;',
    '"': '&quot;',
    "'": '&#039;'
  }
  return text.replace(/[&<>"']/g, (m) => map[m])
}

/**
 * 从HTML提取纯文本
 */
export function htmlToPlainText(html: string): string {
  // 简单的HTML标签移除
  return html.replace(/<[^>]*>/g, '').trim()
}
